package com.cy.detectsys.model;

import cn.hutool.core.bean.BeanUtil;
import com.cy.detectsys.config.CustomException;
import com.cy.detectsys.entity.DetectMission;
import com.cy.detectsys.model.vo.DetectMissionVO;
import com.github.pagehelper.Page;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
public class PageDto<T> {

    private long dataCount;

    private List<T> data;

    private int page;

    private int pageSize;

    private int pageCount;

    public PageDto(List<T> data) {
        if (data instanceof Page) {
            Page<T> page = (Page<T>) data;
            this.page = page.getPageNum();
            this.pageSize = page.getPageSize();
            this.dataCount = page.getTotal();
            this.pageCount = page.getPages();
            this.data = page;
        }
    }



    public static <T> PageDto<T> listToPageDto(List<T> list, long dataCount, int page, int pageSize) {
        PageDto<T> pageDto = new PageDto<>();
        pageDto.setDataCount(dataCount);
        int pageCount = (int) (Math.ceil((double) dataCount / (double) pageSize));
        pageDto.setPageCount(pageCount);
        pageDto.setPage(page);
        pageDto.setPageSize(pageSize);
        pageDto.setData(list);
        return pageDto;
    }


    public static <T> PageDto<T> listToPageDto(List<T> list) {
        PageDto<T> pageDto = new PageDto<>();
        if (list instanceof Page) {
            Page<T> page = (Page<T>) list;
            pageDto.setPage(page.getPageNum());
            pageDto.setPageSize(page.getPageSize());
            pageDto.setDataCount(page.getTotal());
            pageDto.setPageCount(page.getPages());
            pageDto.setData(page);
        }else{
            pageDto.setPage(1);
            pageDto.setPageSize(list.size());
            pageDto.setDataCount(list.size());
            pageDto.setPageCount(1);
            pageDto.setData(list);
        }
        return pageDto;
    }







    public static PageDto<Object> empty() {
        return new PageDto<>();
    }

    public static <T,Y> PageDto<Y> listToPageVO(List<T> originList, Class<Y> newClass) {

        List detectMissionVOS = BeanUtil.copyToList(originList, newClass);

        PageDto<Y> pageDto = new PageDto<>();
        Page page = (Page) originList;
        pageDto.setPage(page.getPageNum());
        pageDto.setPageSize(page.getPageSize());
        pageDto.setDataCount(page.getTotal());
        pageDto.setPageCount(page.getPages());
        pageDto.setData(detectMissionVOS);
        return pageDto;
    }
}
